// server.js
const express = require('express');
const fs = require('fs');
const path = require('path');
const bodyParser = require('body-parser');
const app = express();
const PORT = 3000;

// 用户数据存储文件
const USERS_FILE = path.join(__dirname, 'users.json');

// 中间件
app.use(bodyParser.json());
app.use(express.static('../frontend'));

// 确保用户数据文件存在
if (!fs.existsSync(USERS_FILE)) {
  fs.writeFileSync(USERS_FILE, '[]', 'utf8');
}

// 跳转到注册页面路由
app.get('/register', (req, res) => {
  res.sendFile(path.join(__dirname, '../frontend/', 'register.html'));
});

// 注册路由
app.post('/register', (req, res) => {
  // 打印收到的注册请求
  console.log('收到注册请求:', req.body);
  const { name, userId, email, password, role } = req.body;
  
  // 基本验证
  if (!name || !userId || !email || !password || !role) {
    return res.status(400).json({ success: false, message: '所有字段都是必填的' });
  }
  
  // 读取现有用户
  fs.readFile(USERS_FILE, 'utf8', (err, data) => {
    if (err) {
      console.error('读取文件失败:', err);
      return res.status(500).json({ success: false, message: '服务器内部错误' });
    }
    
    try {
      const users = JSON.parse(data || '[]');
      
      // 检查用户ID或邮箱是否已存在
      const idExists = users.some(user => user.userId === userId);
      const emailExists = users.some(user => user.email === email);
      
      if (idExists) {
        return res.status(400).json({ success: false, message: '用户ID已存在' });
      }
      
      if (emailExists) {
        return res.status(400).json({ success: false, message: '电子邮箱已存在' });
      }
      
      // 添加新用户
      const newUser = {
        id: Date.now().toString(),
        name,
        userId,
        email,
        password, // 实际应用中应使用bcrypt等库加密
        role,
        createdAt: new Date().toISOString()
      };
      
      users.push(newUser);
      
      // 保存到文件
      fs.writeFile(USERS_FILE, JSON.stringify(users, null, 2), (err) => {
        if (err) {
          console.error('写入文件失败:', err);
          return res.status(500).json({ success: false, message: '注册失败' });
        }
        res.status(201).json({ 
          success: true, 
          message: '注册成功', 
          user: {
            id: newUser.id,
            name: newUser.name,
            userId: newUser.userId,
            email: newUser.email,
            role: newUser.role,
            createdAt: newUser.createdAt
          }
        });
      });
    } catch (parseError) {
      console.error('解析JSON失败:', parseError);
      res.status(500).json({ success: false, message: '服务器内部错误' });
    }
  });
});

// 跳转到登录页面路由
app.get('/login', (req, res) => {
  res.sendFile(path.join(__dirname, '../frontend/', 'login.html'));
});

// 登录路由
app.post('/login', (req, res) => {
  // 打印收到的登录请求
  console.log('收到登录请求:', req.body);
  const { username, password, role } = req.body;
  // 基本验证
  if (!username || !password || !role) {
    console.log('登录请求缺少必要字段:', username, password, role);
    return res.status(400).json({ success: false, message: '所有字段都是必填的' });
  }
  // 读取用户数据
  fs.readFile(USERS_FILE, 'utf8', (err, data) => {
    if (err) {
      console.error('读取文件失败:', err);
      return res.status(500).json({ success: false, message: '服务器内部错误' });
    }
    try {
      const users = JSON.parse(data || '[]');
      console.log('读取到的用户数据:', users);
      // 查找匹配的用户
      const user = users.find(u => u.name === username && u.password === password && u.role === role);
      console.log(user ? '找到用户:' : '未找到用户:', user);
      if (user) {
        // 登录成功
        if (user.role === 'student') {
          res.status(200).json({
            success: true,
            message: '登录成功',
            user: {
              name: user.name,
              studentId: user.userId,
              class: user.class // 假设用户对象有class字段
            }
          });
        } else if (user.role === 'teacher') {
          // 假设用户对象有 classes 字段（班级列表），每个班级有学生列表
          // 发送时前端应传递所选班级名，假设为 req.body.selectedClass
          const selectedClass = req.body.selectedClass;
          let students = [];
          if (user.classes && selectedClass) {
            const foundClass = user.classes.find(cls => cls.name === selectedClass);
            if (foundClass && foundClass.students) {
              students = foundClass.students;
            }
          }
          res.status(200).json({
            success: true,
            message: '登录成功',
            user: {
              name: user.name,
              employeeId: user.userId, // 假设老师的 userId 是员工号
              classes: user.classes ? user.classes.map(cls => cls.name) : [],
              students
            }
          });
        } else {
          // 其他角色默认返回基本信息
          res.status(200).json({
            success: true,
            message: '登录成功',
            user: {
              id: user.id,
              name: user.name,
              userId: user.userId,
              email: user.email,
              role: user.role,
              createdAt: user.createdAt
            }
          });
        }
      } else {
        // 登录失败
        res.status(401).json({ success: false, message: '用户名或密码错误' });
      }
    } catch (parseError) {
      console.error('解析JSON失败:', parseError);
      res.status(500).json({ success: false, message: '服务器内部错误' });
    }
  });
}
);

// 获取实验数据路由
app.get('/api/experiments', (req, res) => {
  // 打印收到的实验请求
  console.log('收到实验请求:', req.query);
  const { studentId } = req.query;
  // 读取用户数据
  fs.readFile(exp.json, 'utf8', (err, data) => {
    if (err) {
      console.error('读取文件失败:', err);
      return res.status(500).json({ success: false, message: '服务器内部错误' });
    }
    try {
      const users = JSON.parse(data || '[]');
      console.log('读取到的用户数据:', users);
      // 查找匹配的用户
      const user = users.find(u => u.userId === studentId);
      console.log(user ? '找到用户:' : '未找到用户:', user);
      if (user) {
        // 登录成功
        const experiments = [
          { id: 1, name: '实验1', description: '这是实验1的描述', status: '进行中' },
          { id: 2, name: '实验2', description: '这是实验2的描述', status: '已完成' }
          ];
        res.status(200).json({
          success: true,
          message: '获取实验成功',
          experiments
        });
        } else {
          // 获取失败
          res.status(401).json({ success: false, message: '未找到该学生' });
        }
      } catch (parseError) {
        console.error('解析JSON失败:', parseError);
        res.status(500).json({ success: false, message: '服务器内部错误' });
      }
    });
});

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
});